基因组比对绘图 -- 8703项目
一.单拷贝基因共线性图(单条染色体)
1.准备目标区间的pep序列
## 对每个样本进行提取
CHROM=`awk -F ">" 'NR==1 {print $2}' chromosome_4A.fasta` && START=`awk 'NR==1 {print $1}' 12m.bed` && END=`awk 'NR==1 {print $2}' 12m.bed` && awk -v chrom="$CHROM" -v start="$START" -v end="$END" '{ if ($1 == chrom && $4 >= start && $5 <= end) { print; }}' chromosome_4A.gff > 12m.gff && gffread -x cds.fa -g chromosome_4A.fasta 12m.gff && ir.py -i cds.fa -o pep.fa -s7 -n 1
## 复制备用
for i in *;do cp $i/pep.fa gene_plot/$i.pep.fa;done
2.运行聚类
perl /share/nas6/xul/program/fungi/tree/EasyTree.pl -id pep # pep是目录,里面放各自的蛋白序列
## 获得Orthogroups_SingleCopyOrthologues.txt、Orthogroups.txt,路径TREE/format_seq/OrthoFinder/Results_Aug13/Orthogroups
3.绘图
for i in *;do cp $i/12m.gff gene_plot/TREE/format_seq/OrthoFinder/Results_*/Orthogroups/$i.12m.gff;done
cat Orthogroups_SingleCopyOrthologues.txt | while read i ;do grep $i Orthogroups.txt ;done | cut -d ":" -f 2 |sed 's/^ //g' > tmp.txt
## 调整画图的列数和顺序,注意这里索引从0开始
perl -lane 'print join" ",@F[4,5,6,1,2,3]' tmp.txt | less > tmp2.txt # 按第5,6,7,2,3,4列重排
## 可以不调整画图的列数,不使用tmp2
perl /share/nas6/xul/program/nuclear/other/get_single_copy_gene_pos.pl -i tmp2.txt -g *.12m.gff* && realpath tmp_collinearity/input.cfg
# 这一步报错可能是因为tmp文件每个基因多了transcript标签,要删掉
## 6种颜色
perl /share/nas6/xul/program/fungi/colinearity/draw_collinearity.pl -i tmp_collinearity/input.cfg -l tmp_collinearity/*.txt -o synteny.svg && svg2xxx synteny.svg ./ -t png -dpi 300
## 15种颜色,修改线宽为5
perl /share/nas1/yuj/program/fungi/colinearity/draw_collinearity.pl -i tmp_collinearity/input.cfg -l tmp_collinearity/*.txt2 -o synteny.svg && svg2xxx synteny.svg ./ -t png -dpi 300
通过全部减去720000000来完成部分绘图
二.基因组SV可视化绘图
1.0 区间寻找
1.
## 中国春
cp_add.py -i chromosome_*A.fasta -p 740000001-754227511:+ -sn 4A_12M.fa > log ; sed -i '1 i\>4A_12M' *4A_12M.fa && rm log
2.绘图查找
for i in {aegilopoides_TA299,dicoccoides_WEW_v2.1,durum,monococcum_TA10622,urartu_G1812} ;do cd $i && nucmer -t 15 -l 300 -c 1000 --mum ../4A_12M.fa chromosome_*A.fasta -p $i && delta-filter -m -i 85 -l 15000 -o 85 $i.delta -1>$i.filtered.delta && show-snps -Clr $i.filtered.delta > $i.filtered.delta.snps && mummerplot -p $i $i.filtered.delta -t postscript && ps2pdf $i.ps $i.pdf && convert -density 300 $i.pdf $i.png & done
3.根据比对结果填写取出的bed文件
cat */*bed && echo -e "\t$(awk 'NR==1 {print $3}' */*bed)" > 12m.bed && rm *4A_12M.fa ; cpath=`pwd`&& awk 'NR==4 {print $0}' ../plot/`basename $cpath`.filtered.delta
4.提取序列
start=`awk 'NR==1 {print $1}' 12m.bed` && end=`awk 'NR==1 {print $2}' 12m.bed` && cp_add.py -i chromosome_4A.fasta -p $start"-"$end":+" -sn 4A_12M.fa > log ; sed -i '1 i\>4A_12M' *4A_12M.fa && rm log && ir.py -l -i 4A_12M.fa && ll
1.1提取
1.查看长度
seqkit fx2tab --length --name --header-line *.fna > size # id(包括染色体)<TAB>长度
2.提取某染色体序列和gff
fa=*.f*a* && gff=*.gff* && seqkit fx2tab --length --name --header-line $fa > size
chr=4A && grep $chr size | awk '{print $1"\t"0"\t"$NF}' > $chr.bed && bedtools getfasta -fi $fa -bed $chr.bed -fo $chr.fasta && tail -n 1 $chr.fasta > noid.$chr.fasta && fold -w 80 noid.$chr.fasta > chromosome_${chr}.fasta && sed -i '1 i\>4A' chromosome_4A.fasta && grep `cat $chr.bed|awk '{print $1}'` $gff > chromosome_${chr}.gff && mv chromosome_* ../
3.提取染色体序列末尾
length=`cut -f 3 $chr.bed` && cd ../ && cp_add.py -i chromosome_4A.fasta -p 740000001-${length}:+ -sn 4A_12M.fa > log ; sed -i '1 i\>4A_12M' *4A_12M.fa && rm log
1.2比对画图
1.2.1 流程minimap2
/share/nas6/xul/program/nuclear/syri/multi-genome_syri_plot.pl
perl /share/nas1/yuj/program/nuclear/syri/multi-genome_syri_plot.pl -i ref_4A_12M.fa dicoccoides_4A_12M.fa xxx.fa aaa.fa
## 分步进行
# Using minimap2 for generating alignment. Any other whole genome alignment tool can also be used.
1.全基因组序列比对
minimap2 -ax asm5 --eqx refgenome qrygenome > out.sam
2.基于比对结果检测结构变异
python3 $PATH_TO_SYRI -c out.sam -r refgenome -q qrygenome -k -F S
# or
samtools view -b out.sam > out.bam
python3 $PATH_TO_SYRI -c out.bam -r refgenome -q qrygenome -k -F B
3.结构变异检测结果绘图
python3 $PATH_TO_PLOTSR syri.out refgenome qrygenome -H 8 -W 5
1.2.2 mummer
1.基因组比对
# nucmer -t 15 --maxmatch -c 100 -b 500 -l 50 refgenome qrygenome
# Whole genome alignment. Any other alignment can also be used. -maxmatch
# 会识别所有比对,搭配“-m -i 85 -l 15000 -o 85 out.delta -1”绘图会比较好看
nucmer -t 15 -l 300 -c 1000 --mum refgenome qrygenome # 更快
2.比对结果过滤
delta-filter -m -i 85 -l 15000 -o 85 out.delta -1> out.filtered.delta # Remove small and lower quality alignments 筛选长度>15000bp,匹配度>85% 的匹配情况
-m 会删除冗余比对。
-i 指定最小的alignment相似性阈值
-l 注意,这里是字母小写的L,指定最小的alignment长度
-o 和-r,-q相关,可以理解为alignment coverage
-1 注意,这里是数字1,指定是否进行一对一的比对,一个位置(subject或query上)只找一个最佳的比对。特别是对大的基因组一定要加这个选项,否则会异常慢
show-snps -Clr out.filtered.delta > out.filtered.delta.snps
mummerplot -p out out.filtered.delta -t postscript # ps格式图片
ps2pdf out.ps out.pdf && convert -density 300 out.pdf out.png
for i in *.fa;do echo ${i%_4A_12M.fa};nucmer -t 15 -l 300 -c 1000 --mum ../CS2.1_4A_12M.fa $i -p ${i%_4A_12M.fa} && delta-filter -m -i 85 -l 15000 -o 85 ${i%_4A_12M.fa}.delta -1> ${i%_4A_12M.fa}.filtered.delta && show-snps -Clr ${i%_4A_12M.fa}.filtered.delta > ${i%_4A_12M.fa}.filtered.delta.snps && mummerplot -p ${i%_4A_12M.fa} ${i%_4A_12M.fa}.filtered.delta -t postscript && ps2pdf ${i%_4A_12M.fa}.ps ${i%_4A_12M.fa}.pdf && convert -density 300 ${i%_4A_12M.fa}.pdf ${i%_4A_12M.fa}.png & done
3.获得每个 alignment 的位置
show-coords -THrd out.filtered.delta > out.filtered.coords # Convert alignment information to a .TSV format as required by SyRI
4.结构变异检测
syri -c out.filtered.coords -d out.filtered.delta -r refgenome -q qrygenome --prefix 4A_12M --nc 8 # -nc 核心数,默认1
5.结果绘图
plotsr 4A_12Msyri.out refgenome qrygenome -H 8 -W 12 -o 4A_12M.pdf # 简简单单
/share/nas1/yuj/software/micromamba/envs/py3.8/bin/plotsr --genomes genomes.txt -o output_plot.pdf -H 8 -W 12 --sr ref_4A_12M_dicoccoides_4A_12Msyri.out # --genomes 是绘图样式参数,里面有ref qry路径
结果文件
syri.out #检测序列变异的文本信息
syri.vcf #检测序列vcf
syri.summary #变异类型统计文件
syri.pdf #输出图
syri.out
顺序依次为:参考染色体/起始位置/结束位点/参考位点/等位位点/比对染色体(query)/起始位点(query)/结束位点(query)/类型+顺序(ref)/类型+顺序(query)/注释类型/复制状态
输入文件:
-c INFILE:包含比对坐标的文件。这个文件可能是从一个比对软件(比如MUMmer)生成的,其中包含了两个基因组之间的比对信息,包括每个比对的起始位置、终止位置等信息。
-r REF:作为比对参考的基因组A的文件。
-q QRY:作为比对查询的基因组B的文件。
-d DELTA:MUMmer生成的.delta文件。
可选参数:
-F {T,S,B}:指定输入文件的类型。可以是表格文件(T),SAM文件(S)或BAM文件(B)。默认为表格文件。
-k:保留中间输出文件。默认为False。
--log {DEBUG,INFO,WARN}:设置日志级别。可以选择DEBUG(调试)、INFO(信息)、WARN(警告)等级别。默认为INFO。
--lf LOG_FIN:指定日志文件的名称。默认为"syri.log"。
--dir DIR:指定工作目录的路径。默认为当前目录。
--prefix PREFIX:指定输出文件名前缀。默认为空。
--seed SEED:用于生成随机数的种子。默认为1。
--nc NCORES:指定并行计算时使用的核心数量。最大值是染色体的数量。默认为1。
--novcf:不将所有文件合并为一个输出文件。默认为False。
-f:过滤掉低质量的比对。默认为True。
结构变异检测:
--nosv:设置为True以跳过结构变异的识别。默认为False。
--nosnp:设置为True以跳过在比对中识别SNP/Indel。默认为False。
--all:设置为True以使用重复区域(duplications)进行变异识别。默认为False。
--allow-offset OFFSET:允许碱基对(base pairs)重叠的数量。默认为5,表示如果两个变异区域之间的重叠小于等于5个碱基对,则允许识别为同一变异。
--cigar:设置为True以使用CIGAR字符串来查找SNP/Indel。默认为False,表示不使用CIGAR字符串。通常在使用除了nucmers之外的比对器生成的比对结果时,需要设置为True。
-s SSPATH:指定show-snps工具的路径,show-snps是MUMmer软件包中的一个工具,用于从.delta文件中提取SNP信息。默认为show-snps。
结构重排识别:
--nosr:设置为True以跳过结构重排事件的识别。默认为False,表示执行结构重排事件的识别。
--tdgaplen TDGL:多重比对转座或重复(TD)的两个比对之间允许的最大间隙长度。较大的值会增加TD识别的灵敏度,但也会增加运行时间。默认为500000。
-b BRUTERUNTIME:限制Brute Force方法运行时间的阈值(以秒为单位)。较小的值会使算法运行更快,但可能会对准确性产生边际影响。在一般情况下,可能不需要设置这个参数。默认为60。
--unic TRANSUNICOUNT:选择转座时所需的唯一碱基对数。较小的值会更好地选择较小的转座,但可能会增加时间并降低准确性。默认为1000。
--unip TRANSUNIPERCENT:选择转座时所需的唯一区域百分比。值应在(0,1]范围内。较小的值会选择与其他区域更重叠的转座。默认为0.5。
--inc INCREASEBY:添加另一个比对到转座簇解决方案所需的最小分数增加。默认为1000。
--no-chrmatch:如果两个基因组的染色体ID不相等,则设置为True,不允许SyRI自动匹配染色体ID。默认为False。
mummer
show-snps 用于显示两样本的snp信息
show-aligns 用于显示比对,可以单独列出每个序列的比对情况。
show-coords 用于显示比对坐标,用于后续共线性分析定制化绘图
show-diff显示大的染色体变化 倍增 重排或者直接使用dnadiff软件一步生成,结果非常详细,还有一个report报告文件
dnadiff可以直接加-d接delta格式的结果(/opt/software/mummer-3.9.4alpha/dnadiff -d \<outpfix\>.delta),或者更方便直接接两条序列即可,非常方便好用。
plotsr
python /path/to/plotsr syri.out /path/to/refgenome /path/to/qrygenome
positional arguments:
reg syri.out file generated by SyRI
r path to reference genome
q path to query genome
optional arguments:
-h, --help show this help message and exit
-s S minimum size of a SR to be plotted
-R Create ribbons
-f F font size
-H H height of the plot
-W W width of the plot
-o {pdf,png,svg} output file format (pdf, png, svg)
-d D DPI for the final image
-b {agg,cairo,pdf,pgf,ps,svg,template}
Matplotlib backend to use
1.3其他操作
1.seqkit
seqkit stat *.fna # 统计总长
seqkit seq -rp ly.chr1.fasta > ly.chr1-rp.fasta # 反向互补
2.统计长度
samtools faidx *.fna && cat *.fai | cut -f 1,2 > size # id(只有序列号)<TAB>长度
3.提取某染色体 # https://www.jianshu.com/p/e834562ef52c/
$ vim 4A.bed #每条Scaffold的长度信息,一般基因组注释文件gff含有这些信息
NC_057803.1 0 754227511
NC_057803.1 0 754227511
$ bedtools getfasta -fi *.fna -bed 4A.bed -fo 4A.fasta
grep "^>" -v 4A.fasta | awk '{ ORS = ""; $1 = $1; print $0}' > chrUn.fasta # 去掉名字
fold -w 80 chrUn.fasta > chromosome_4A.fasta # 控制行宽80输出
sed -i '1 i\>NC_057803.1' chromosome_4A.fasta # 在第一行加">ID"
4.切分为两段 # https://www.jianshu.com/p/e834562ef52c/
$ vim chr4A_2parts.bed # 这里每条染色体从哪里断开是随意设置的,有一点点不严谨
NC_057803.1 0 400000000
NC_057803.1 400000000 754227511
$ bedtools getfasta -fi *.fna -bed chr4A_2parts.bed -fo chr4A_2parts.fasta
grep "^>" chr4A_2parts.fasta
fold -w 80 chr4A_2parts.fasta > chromosome_4A_2parts.fasta
三.xul
bash /share/nas2/yuj/project/2024/genome/GP-20240704-8703_20240717/region.sh chromosome_4A.gff chr4A 740000000 800000000 > chr4AL.gff
个性分析 2DL 特有序列
1.获取CDS序列
gffread -x yzm_chr2AL.fa -g GCA_900231445.1_Svevo.v1_genomic.fna chr2AL.gff
2.比对
makeblastdb -dbtype nucl -in final.cds.fa
for i in chym_chr2E.cds.fa dm_chr2H.cds.fa hm_2R.cds.fa ;do blastn -db final.cds.fa -query $i -outfmt 5 > $i.blast.xml ;done
for i in *.blast.xml ;do perl /share/nas6/pub/pipline/genome-assembly-seq/mitochondrial-genome-seq/current/annotation/src/blast_parser.pl -tophit 1 -topmatch 1 -eval 1e-5 -m 7 $i > `basename $i .blast.xml`.blast.tophit.xls;done
3.整理结果
perl /share/nas6/xul/program/nuclear/other/get_homo_cds_from_blastn_tophit.pl -i *.tophit.xls -g *.gff -f final.cds.fa -o jjm_and_yzm_L.homo.pos.xls > jjm_and_yzxm_L.homo.xls
#perl /share/nas6/xul/program/nuclear/other/get_homo_cds_from_blastn_tophit.pl -i *.tophit.xls ../chr2DL.cds.filter.fa.blast.tophit.xls -g *.gff3 ../chr2DL.gff -f ../2VL.cds.filter.fa -o homo.pos.xls
venn:
head -7 ptxm.homo.xls | sed 's/#//' > ptxm.homo.venn
perl /share/nas6/xul/program/nuclear/gene_family/veen_draw.pl -i jjm_and_yzxm.homo.venn -o jjm_and_yzxm.homo.venn.svg
4.共线性图
perl /share/nas6/xul/program/nuclear/other/get_link_from_homo.pos.pl -i all.homo.pos.xls
cp /share/nas6/xul/program/nuclear/other/ticks.conf /share/nas6/xul/program/nuclear/other/ideogram.conf .
/share/nas6/xul/soft/circos/circos-0.69-6/bin/circos -conf circos.conf && svg2xxx -t pdf circos.svg